package srcTest;

import static org.junit.Assert.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.embeddable.EJBContainer;
import javax.naming.NamingException;

import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

import com.sumset.daos.PuntosDao;
import com.sumset.daos.UsuarioDao;
import com.sumset.entidades.Puntos;

/**clase que prueba los metodos del puntosDao
 * @author leyson FCP
 *
 */
public class PuntosTest {

	private static EJBContainer contenedor;
	private static PuntosDao pd;
	/**
	 * metodo que incializa los atributos y crea un registro de puntos
	 * @throws NamingException
	 */
	@BeforeClass
	public static void primerMetodo() throws NamingException {
		Map<String, String> properties=new HashMap<String, String>();
		properties.put(EJBContainer.APP_NAME, "pratica_26");
		contenedor=EJBContainer.createEJBContainer(properties);
		pd=(PuntosDao) contenedor.getContext().lookup("java:global/pratica_26/PuntosDao"); 
		
		Puntos p=new Puntos();
		p.setId(1);
		p.setPost(null);
		p.setUsuario(null);
		p.setPuntos(10);
		
		pd.insert(p);
	}
	
	/**metodo que prueba el insertar de la clase puntosDao
	 * @throws Exception
	 */
	@Test
	public void testInsert() throws Exception {
		Puntos p=new Puntos();
		p.setId(2);
		p.setPost(null);
		p.setUsuario(null);
		p.setPuntos(10);
		
		pd.insert(p);
		
		p=pd.buscar(2);
		
		Assert.assertEquals(2, p.getId().intValue());
	}
	/**metodo que prueba el actualizar de la clase puntosDao
	 * @throws Exception
	 */
	@Test
	public void testUpdate() throws Exception {
		Puntos p=pd.buscar(1);
		p.setPuntos(20);
		pd.update(p);
		p=pd.buscar(1);
				
		Assert.assertEquals(20, p.getPuntos().intValue());
	}
	/**metodo que prueba el eliminar de la clase puntosDao
	 * @throws Exception
	 */
	@Test
	public void testDelete() throws Exception {
		Puntos p=pd.buscar(2);
		pd.delete(p);
		
		p=pd.buscar(2);
		
		Assert.assertEquals(null, p);
	}
	/**metodo que prueba el buscar de la clase puntosDao
	 * @throws Exception
	 */
	@Test
	public void testBuscar() throws Exception {
		Puntos p=pd.buscar(1);
		Assert.assertEquals(1, p.getId().intValue());
	}
	/**metodo que prueba el listar de la clase puntosDao
	 * @throws Exception
	 */
	@Test
	public void testListar() throws Exception {
		Puntos p=pd.buscar(1);
		List<Puntos> ps=pd.listar();
		
		Assert.assertTrue(ps.contains(p));
	}
	/**
	 * metodo que elimina el rastro de la prueba
	 * @throws Exception
	 */
	@AfterClass
	public static void ultimoMetodo() throws Exception {
		Puntos p=pd.buscar(1);
		pd.delete(p);
	}

}
